import axios from 'axios'
import { ElMessage } from 'element-plus'
import { getToken } from './auth'
import useUserStore from '@/store/modules/user'

let request = axios.create({
  baseURL: 'http://localhost:5000/crm', // 基础路径中会携带变量 /dev-api
  // baseURL: '/api', // 基础路径中会携带变量 /dev-api
  timeout: 5000, // 超时时间 5s
})

// 添加请求 响应拦截器
request.interceptors.request.use((config) => {
  // 加入jwt验证
  // const userStore = useUserStore()  // console.log(userStore.token);
  // 必须返回配置对象，否则无法发出请求
  // config有一个headers属性，配置请求头
  config.headers['Authorization'] = 'Bearer ' + getToken()
  return config
})
// 防止多次刷新
request.interceptors.response.use(
  // 成功回调
  (response) => {
    // console.log('chenggong');
    return response.data
  },
  // 错误回调， 处理http网络错误
  async (error) => {
    console.log('请求拦截器错误', error)
    let message = ''
    let status = error.response.status

    if (status === 401 || status === 422) {
      // token失效
      try {
        let userStore = useUserStore()
        // console.log('走的响应器');
        await userStore.refreshTokenAction(error.config)
        return request(error.config)
      } catch (error) {
        console.log(error)
      }
    } else {
      //刷新token不提示错误信息
      switch (status) {
        // case 401:
        //   message = 'token过期'
        //   break
        // return 'OK'
        // case 422:
        //   message = '请求有误'
        //   break
        // let userStore = useUserStore()
        // isRefreshing = true
        // console.log('请求刷新');
        // userStore.refreshTokenAction(config)  // 这里要await一下，否则会连续发老token的请求
        // return request(config)
        // let newConfig = refreshConfig(config) //这里的config修改一定要用复制，而非引用
        // let resp = await axios(newConfig)
        // let newAccessToken = resp.data.data.access_token
        // setAccessToken(newAccessToken)
        // console.log('222',config);
        // console.log(config);
        // // break
        // return request(config)
        case 403:
          message = '没有权限'
          break
        case 404:
          message = '请求地址错误'
          break
        case 201:
          message = error.response.message
          break
      }
      // 提示错误信息
      ElMessage({
        type: 'error',
        message,
      })
    }
    return Promise.reject(error)
  },
)

// 对外暴露
export default request
